﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Ferreteria.Clases;
using Ferreteria.Forms.GestionClientes;

namespace Ferreteria.Forms
{
    public partial class frmVerInformacionCliente : Form
    {
        int clienteid;
        int ventaid;
        

        const string Todas = "Todas";
        const string Pagadas = "Pagadas";
        const string Impagas = "Impagas";
        const string Anuladas = "Anuladas";
        const string Pendientes = "Pendientes";

        public frmVerInformacionCliente(int idDelCliente,string categoriausuario, int cantdiasacalcular)
        {
            InitializeComponent();
            clienteid = idDelCliente;
            int diasacalcular = cantdiasacalcular;
            dtpComprasFechaInicio.Value = DateTime.Today.AddDays(-diasacalcular);
            dtpCompAdInicio.Value = DateTime.Today.AddDays(-diasacalcular);
            
            if (categoriausuario == Categoria.Empleado)
            {
                btnRegistrarPago.Enabled = false;
            
            } 
            else
                btnRegistrarPago.Enabled = true;
                
            using (var context = new DisancoEntities())
            {
                var cliente = context.Clientes.FirstOrDefault(c => c.cliente_id == idDelCliente);

                btnFacturarVtaPend.Enabled = false;
               
                
                txbNombre.Text = cliente.cliente_nombre;
                txbDireccion.Text = cliente.cliente_direccion;
                txbUbicacion.Text = cliente.cliente_ubicacion;
                txbPais.Text = cliente.cliente_pais;
                txbProvincia.Text = cliente.cliente_provincia;
                txbLocalidad.Text = cliente.cliente_localidad;
                txbCodigoPostal.Text = cliente.cliente_cp;
                txbCondIVA.Text = cliente.CondicionIVA.condicion_nombre + " (" + cliente.CondicionIVA.condicion_sigla + ")";
                txbCuit.Text = cliente.cliente_cuit;
                txbNroDoc.Text = cliente.cliente_nro_doc;
                txbTipoDoc.Text = cliente.cliente_tipo_doc;
                txbTel1.Text = cliente.cliente_tel1;
                txbTel2.Text = cliente.cliente_tel2;
                txbFax.Text = cliente.cliente_telefax;
                txbTransporte.Text = cliente.cliente_transporte;
                txbEmail.Text = cliente.cliente_email;
            }

            cmbPagoTipo.Items.Add("TODOS");
            cmbPagoTipo.Items.Add(FormasDePago.Cheque);
            cmbPagoTipo.Items.Add(FormasDePago.ContadoEfectivo);
            cmbPagoTipo.SelectedIndex = 0;

            cmbComprasEstado.Items.Add(Todas);
            cmbComprasEstado.Items.Add(Pagadas);
            cmbComprasEstado.Items.Add(Impagas);
            cmbComprasEstado.Items.Add(Anuladas);
            cmbComprasEstado.Items.Add(Pendientes);
            cmbComprasEstado.SelectedIndex = 0;

            cmbCAestado.Items.Add(Todas);
            cmbCAestado.Items.Add(Pagadas);
            cmbCAestado.Items.Add(Impagas);
            cmbCAestado.Items.Add(Anuladas);
            cmbCAestado.SelectedIndex = 0;
        }

        private void cargarCompras()
        {
            IEnumerable<Ventas> queryCompras;

            string estadoCompra = (string)cmbComprasEstado.SelectedItem;

            using (var context = new DisancoEntities())
            {
                var cliente = context.Clientes.FirstOrDefault(c => c.cliente_id == this.clienteid);

                switch (estadoCompra)
                {
                    case Pagadas:
                        queryCompras = from v in cliente.Ventas
                                       where v.venta_fecha.Date >= dtpComprasFechaInicio.Value.Date
                                       where v.venta_fecha.Date <= dtpComprasFechaFin.Value.Date
                                       where v.Cuentas.cuenta_monto == v.Cuentas.cuenta_pagado
                                       where v.venta_estado == Estado.Emitida
                                       select v;
                        break;
                    case Impagas:
                        queryCompras = from v in cliente.Ventas
                                       where v.venta_fecha.Date >= dtpComprasFechaInicio.Value.Date
                                       where v.venta_fecha.Date <= dtpComprasFechaFin.Value.Date
                                       where v.Cuentas.cuenta_monto > v.Cuentas.cuenta_pagado
                                       where v.venta_estado == Estado.Emitida
                                       select v;
                        break;
                    case Anuladas:
                        queryCompras = from v in cliente.Ventas
                                       where v.venta_fecha.Date >= dtpComprasFechaInicio.Value.Date
                                       where v.venta_fecha.Date <= dtpComprasFechaFin.Value.Date
                                       where v.venta_estado == Estado.Anulada
                                       select v;
                        break;
                    case Pendientes:
                        queryCompras = from v in cliente.Ventas
                                       where v.venta_fecha.Date >= dtpComprasFechaInicio.Value.Date
                                       where v.venta_fecha.Date <= dtpComprasFechaFin.Value.Date
                                       where v.venta_estado == Estado.Pendiente
                                       select v;
                        break;
                    default:
                        queryCompras = from v in cliente.Ventas
                                       where v.venta_fecha.Date >= dtpComprasFechaInicio.Value.Date
                                       where v.venta_fecha.Date <= dtpComprasFechaFin.Value.Date
                                       select v;
                        break;
                }



                dgvComprasRealizadas.Rows.Clear();

                foreach (var venta in queryCompras)
                {
                    int i = dgvComprasRealizadas.Rows.Add();

                    dgvComprasRealizadas.Rows[i].Cells["venta_id"].Value = venta.id_venta;
                    dgvComprasRealizadas.Rows[i].Cells["venta_fecha"].Value = venta.venta_fecha.ToShortDateString();
                    dgvComprasRealizadas.Rows[i].Cells["venta_hora"].Value = venta.venta_fecha.ToShortTimeString();
                    dgvComprasRealizadas.Rows[i].Cells["venta_nro_inicio"].Value = venta.venta_nro_inicio;
                    dgvComprasRealizadas.Rows[i].Cells["venta_tipo_comprobante"].Value = venta.venta_tipo_comprobante;
                    dgvComprasRealizadas.Rows[i].Cells["venta_subtotal"].Value = venta.venta_subtotal;
                    dgvComprasRealizadas.Rows[i].Cells["venta_descuento"].Value = venta.venta_descuento;
                    dgvComprasRealizadas.Rows[i].Cells["venta_iva"].Value = venta.venta_iva;
                    dgvComprasRealizadas.Rows[i].Cells["venta_monto"].Value = venta.venta_monto;

                    if (venta.cuenta_id != null)
                    {
                        dgvComprasRealizadas.Rows[i].Cells["pagado"].Value = venta.Cuentas.cuenta_pagado;
                    }

                    dgvComprasRealizadas.Rows[i].Cells["v_estado"].Value = venta.venta_estado;
                }

                if (dgvComprasRealizadas.CurrentRow != null)
                    btnVerInfoCompra.Enabled = true;
                else
                    btnVerInfoCompra.Enabled = false;
            }
        }

        private void cargarComprasAdicionales()
        {
            IEnumerable<VentasAdicionales> queryComprasAdicionales;

            string estadoCompra = (string)cmbCAestado.SelectedItem;

            using (var context = new DisancoEntities())
            {
                var cliente = context.Clientes.FirstOrDefault(c => c.cliente_id == this.clienteid);

                switch (estadoCompra)
                {
                    case Pagadas:
                        queryComprasAdicionales = from va in cliente.VentasAdicionales
                                                  where va.va_fecha.Date >= dtpComprasFechaInicio.Value.Date
                                                  where va.va_fecha.Date <= dtpComprasFechaFin.Value.Date
                                                  where va.Cuentas.cuenta_monto == va.Cuentas.cuenta_pagado
                                                  where va.va_estado == Estado.Emitida
                                                  select va;
                        break;
                    case Impagas:
                        queryComprasAdicionales = from va in cliente.VentasAdicionales
                                                  where va.va_fecha.Date >= dtpComprasFechaInicio.Value.Date
                                                  where va.va_fecha.Date <= dtpComprasFechaFin.Value.Date
                                                  where va.Cuentas.cuenta_monto > va.Cuentas.cuenta_pagado
                                                  where va.va_estado == Estado.Emitida
                                                  select va;
                        break;
                    case Anuladas:
                        queryComprasAdicionales = from va in cliente.VentasAdicionales
                                                  where va.va_fecha.Date >= dtpComprasFechaInicio.Value.Date
                                                  where va.va_fecha.Date <= dtpComprasFechaFin.Value.Date
                                                  where va.va_estado == Estado.Anulada
                                                  select va;
                        break;
                    default:
                        queryComprasAdicionales = from va in cliente.VentasAdicionales
                                                  where va.va_fecha.Date >= dtpComprasFechaInicio.Value.Date
                                                  where va.va_fecha.Date <= dtpComprasFechaFin.Value.Date
                                                  select va;
                        break;
                }


                dgvComprasAdicionales.Rows.Clear();

                foreach (var va in queryComprasAdicionales)
                {
                    int i = dgvComprasAdicionales.Rows.Add();

                    dgvComprasAdicionales.Rows[i].Cells["va_id"].Value = va.va_id;
                    dgvComprasAdicionales.Rows[i].Cells["va_fecha"].Value = va.va_fecha;
                    dgvComprasAdicionales.Rows[i].Cells["va_hora"].Value = va.va_fecha;
                    dgvComprasAdicionales.Rows[i].Cells["va_numero"].Value = va.va_nro_comp_ini;
                    dgvComprasAdicionales.Rows[i].Cells["va_total"].Value = va.va_monto;
                    dgvComprasAdicionales.Rows[i].Cells["va_pagado"].Value = va.Cuentas.cuenta_pagado;
                    dgvComprasAdicionales.Rows[i].Cells["va_estado"].Value = va.va_estado;
                }

                if (dgvComprasAdicionales.CurrentRow != null)
                    tsbInfoCA.Enabled = true;
                else
                    tsbInfoCA.Enabled = false;
            }
        }

        private void cargarPagos()
        {
            string tipo = (string)cmbPagoTipo.SelectedItem;
            IEnumerable<Pagos> queryPagos;

            using (var context = new DisancoEntities())
            {
                var cliente = context.Clientes.FirstOrDefault(c => c.cliente_id == this.clienteid);

                switch (tipo)
                {
                    case "TODOS":
                        {
                            queryPagos = from pago in cliente.Pagos
                                         where pago.pago_fecha.Date >= dtpPagosFechaInicio.Value.Date
                                         where pago.pago_fecha.Date <= dtpPagosFechaFin.Value.Date
                                         select pago;

                            break;
                        }
                    default:
                        {
                            queryPagos = from pago in cliente.Pagos
                                         where pago.pago_tipo == tipo
                                         where pago.pago_fecha.Date >= dtpPagosFechaInicio.Value.Date
                                         where pago.pago_fecha.Date <= dtpPagosFechaFin.Value.Date
                                         select pago;
                            break;
                        }
                }

                if (queryPagos.Count() > 0)
                {
                    queryPagos = queryPagos.OrderBy(n => n.pago_nro);
                    int ultimoNumero = 0;

                    dgvPagos.Rows.Clear();

                    foreach (var p in queryPagos)
                    {
                        if (p.pago_nro == ultimoNumero)
                        {
                            int i = dgvPagos.Rows.Count - 1;
                            decimal monto = (decimal)dgvPagos.Rows[i].Cells["pago_monto"].Value;
                            dgvPagos.Rows[i].Cells["pago_monto"].Value = monto + p.pago_monto;
                        }
                        else
                        {
                            int i = dgvPagos.Rows.Add();

                            dgvPagos.Rows[i].Cells["pago_nro"].Value = p.pago_nro;
                            dgvPagos.Rows[i].Cells["pago_fecha"].Value = p.pago_fecha.ToShortDateString();
                            dgvPagos.Rows[i].Cells["pago_hora"].Value = p.pago_fecha.ToShortTimeString();
                            dgvPagos.Rows[i].Cells["pago_monto"].Value = p.pago_monto;
                            dgvPagos.Rows[i].Cells["pago_tipo"].Value = p.pago_tipo;

                            ultimoNumero = p.pago_nro;
                        }
                    }
                }
            }
        }

        private void dtpFechaInicio_ValueChanged(object sender, EventArgs e)
        {
            cargarCompras();
        }

        private void dtpFechaFin_ValueChanged(object sender, EventArgs e)
        {
            cargarCompras();
        }

        private void cmbComprasEstado_SelectedIndexChanged(object sender, EventArgs e)
        {
            cargarCompras();
        }

        private void dtpPagosFechaInicio_ValueChanged(object sender, EventArgs e)
        {
            cargarPagos();
        }

        private void dtpPagosFechaFin_ValueChanged(object sender, EventArgs e)
        {
            cargarPagos();
        }

        private void cmbPagoTipo_SelectedIndexChanged(object sender, EventArgs e)
        {
            cargarPagos();
        }

        private void dgvPagos_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            frmDetallePago infoCheque = new frmDetallePago((int)dgvPagos.CurrentRow.Cells["pago_nro"].Value);
            infoCheque.ShowDialog();
        }

        private void dgvComprasRealizadas_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            int id_venta = (int)dgvComprasRealizadas.CurrentRow.Cells["venta_id"].Value;

            using (var context = new DisancoEntities())
            {
                Ventas objVenta = context.Ventas.FirstOrDefault(v => v.id_venta == id_venta);

                frmDetalleCompra detalleCompra = new frmDetalleCompra(objVenta);
                detalleCompra.ShowDialog();
            }

        }

        //private void tsbVerInfoCompra_Click(object sender, EventArgs e)
        //{
            //int id_venta = (int)dgvComprasRealizadas.CurrentRow.Cells["venta_id"].Value;

            //using (var context = new DisancoEntities())
            //{
            //    Ventas objVenta = context.Ventas.FirstOrDefault(v => v.id_venta == id_venta);

            //    frmDetalleCompra detalleCompra = new frmDetalleCompra(objVenta);
            //    detalleCompra.ShowDialog();
            //}
        //}

        //private void tsbRegistrarPago_Click(object sender, EventArgs e)
        //{
        //    using (var context = new DisancoEntities())
        //    {
        //        var cliente = context.Clientes.FirstOrDefault(c => c.cliente_id == this.clienteid);

        //        frmRegistrarPago pago = new frmRegistrarPago(cliente.cliente_id);
        //        DialogResult dr = pago.ShowDialog();

        //        if (dr == System.Windows.Forms.DialogResult.OK)
        //        {
        //            int id = cliente.cliente_id;
        //            //context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);
        //            cliente = context.Clientes.FirstOrDefault(c => c.cliente_id == id);

        //            cargarCompras();
        //            cargarComprasAdicionales();
        //            cargarPagos();
        //        }
        //    }
        //}

        private void dtpCompAdInicio_ValueChanged(object sender, EventArgs e)
        {
            cargarComprasAdicionales();
        }

        private void dtpCompAdFin_ValueChanged(object sender, EventArgs e)
        {
            cargarComprasAdicionales();
        }

        private void cmbCAestado_SelectedIndexChanged(object sender, EventArgs e)
        {
            cargarComprasAdicionales();
        }

        //private void txbImprimirVentas_Click(object sender, EventArgs e)
        //{
        //    generarTablaVentas();

        //    diagVentas.Document = docVentas;
        //    DialogResult resultado = diagVentas.ShowDialog();

        //    if (resultado == DialogResult.OK)
        //    {
        //        docVentas.PrinterSettings = diagVentas.PrinterSettings;
        //        //docVentas.Print();
        //        ppdVentas.Document = docVentas;
        //        ((Form)ppdVentas).WindowState = FormWindowState.Maximized;
        //        ppdVentas.ShowDialog();
        //    }

        //}

        private Font printFont = new Font("Calibri", 12);
        private Font printFontTitulo = new Font("Calibri", 16, FontStyle.Bold);
        private Font printFontsubTitulo = new Font("Calibri", 13, FontStyle.Italic);
        int countArticulos;
        DataTable dtInformeVentas;

        private void generarTablaVentas()
        {
            countArticulos = 0;

            dtInformeVentas = new DataTable();
            dtInformeVentas.Columns.Add("art_id");
            dtInformeVentas.Columns.Add("art_nombre");
            dtInformeVentas.Columns.Add("art_cantidad");

            using (var context = new DisancoEntities())
            {
                foreach (DataGridViewRow fila in dgvComprasRealizadas.Rows)
                {
                    int venta_id = (int)fila.Cells["venta_id"].Value;
                    Ventas venta = context.Ventas.FirstOrDefault(v => v.id_venta == venta_id);

                    foreach (var lVenta in venta.LineaVenta)
                    {
                        int artID = lVenta.art_id;
                        bool existe = false;

                        foreach (DataRow linea in dtInformeVentas.Rows)
                        {
                            if (Convert.ToInt32(linea["art_id"]) == artID)
                            {
                                linea["art_cantidad"] = Convert.ToInt32(linea["art_cantidad"]) + lVenta.cantidad_venta;
                                existe = true;
                                break;
                            }
                        }

                        if (!existe)
                        {
                            DataRow nuevoArt = dtInformeVentas.NewRow();
                            nuevoArt["art_id"] = lVenta.art_id;
                            nuevoArt["art_nombre"] = lVenta.Articulos.art_nombre;
                            nuevoArt["art_cantidad"] = lVenta.cantidad_venta;

                            dtInformeVentas.Rows.Add(nuevoArt);
                        }
                    }
                }
            }
        }

        private void docVentas_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            //context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);
            string fecha = DateTime.Now.ToString("dd/MM/yyyy");
            int margenX = 50;
            int margenY = 50;
            int anchoHoja = 800;

            PointF punto = new PointF();
            punto.X = anchoHoja / 2;
            punto.Y = margenY + 30;

            StringFormat formato = new StringFormat();
            formato.Alignment = StringAlignment.Center;

            //e.Graphics.DrawImage(logo.Image, 10, 20);
            e.Graphics.DrawString("Reporte de Productos Vendidos", printFontTitulo, Brushes.Black, punto, formato);

            e.Graphics.DrawString("Periodo", printFontTitulo, Brushes.Black, 180, 130, formato);

            e.Graphics.DrawString("Desde:", printFontTitulo, Brushes.Black, 340, 130, formato);
            string fechadesde = dtpComprasFechaInicio.Value.ToString("dd/MM/yyyy");
            string fechahasta = dtpComprasFechaFin.Value.ToString("dd/MM/yyyy");

            e.Graphics.DrawString(fechadesde, printFont, Brushes.Black, 415, 135, formato);
            e.Graphics.DrawString("Hasta:", printFontTitulo, Brushes.Black, 580, 130, formato);
            e.Graphics.DrawString(fechahasta, printFont, Brushes.Black, 655, 135, formato);

            punto.Y += 80;
            punto.X = anchoHoja / 3;
            //e.Graphics.DrawString(Filtro, printFontsubTitulo, Brushes.Black, punto, formato);


            //Proceso de dibujado de las lineas 

            int posY = 220;
            int anchoLinea = 25;
            int posArticulo = margenX;
            int posCantidad = posArticulo + 450;


            e.Graphics.DrawLine(Pens.Black, 10, 120, 800, 120);
            e.Graphics.DrawString(fecha, printFont, Brushes.Black, 645, 70);
            e.Graphics.DrawLine(Pens.Black, 10, 180, 800, 180);

            String Cod = "Codigo Art.";
            e.Graphics.DrawString(Cod, printFont, Brushes.Black, 80, 195);
            String Art = "Articulo";
            e.Graphics.DrawString(Art, printFont, Brushes.Black, 380, 195);
            String Cant = "Cantidad";
            e.Graphics.DrawString(Cant, printFont, Brushes.Black, 650, 195);
            e.Graphics.DrawLine(Pens.Black, 10, 215, 800, 215);

            int countLineas = 0;
            int maxLineas = 33;

            int maxArticulos = dtInformeVentas.Rows.Count;

            while (countLineas < maxLineas && countArticulos < maxArticulos)
            {
                DataRow fila = dtInformeVentas.Rows[countArticulos];

                e.Graphics.DrawString(fila["art_nombre"].ToString(), printFont, Brushes.Black, 250, posY);
                e.Graphics.DrawString(fila["art_cantidad"].ToString(), printFont, Brushes.Black, 670, posY);

                countArticulos++;
                countLineas++;
                posY += anchoLinea;
            }

            if (countArticulos == maxArticulos)
            {
                e.HasMorePages = false;
                countArticulos = 0;
            }
            else
                e.HasMorePages = true;
        }

        private void dgvComprasAdicionales_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            int id = (int)dgvComprasAdicionales.CurrentRow.Cells["va_id"].Value;

            using (var context = new DisancoEntities())
            {
                VentasAdicionales objVentaAd = context.VentasAdicionales.FirstOrDefault(v => v.va_id == id);

                frmDetalleCompraAd detalleCompra = new frmDetalleCompraAd(objVentaAd);

                detalleCompra.ShowDialog();
            }
        }

        private void dgvComprasRealizadas_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                string estadoFactura = (string)dgvComprasRealizadas.CurrentRow.Cells["v_estado"].Value;

                if (estadoFactura == Estado.Pendiente)
                {
                    int id_venta = (int)dgvComprasRealizadas.CurrentRow.Cells["venta_id"].Value;

                    using (var context = new DisancoEntities())
                    {
                        Ventas objVenta = context.Ventas.FirstOrDefault(v => v.id_venta == id_venta);
                        btnFacturarVtaPend.Enabled = true;
                        ventaid = objVenta.id_venta;
                        ventaid = id_venta;
                    }
                }
                else
                {
                    btnFacturarVtaPend.Enabled = false;
                    ventaid = 0;
                }
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }
        }

        //private void tsbVolveraGenerar_Click(object sender, EventArgs e)
        //{
            //try
            //{

            //    DisancoEntities contexto = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);

            //    int idVenta = (int)dgvComprasRealizadas.CurrentRow.Cells["venta_id"].Value;

            //    if (AddNewVenta(idVenta))
            //        updateOldVenta(idVenta);

            //    Ventas ventaSelec = contexto.Ventas.FirstOrDefault(v => v.id_venta == idVenta);

            //    generarTablaVentas();
            //}
            //catch (Exception err)
            //{
            //    MessageBox.Show(err.Message);
            //}

        //}

        private bool AddNewVenta(int idVentaVieja)
        {
            try
            {
                Ventas ventaAnulada = new Ventas();
                Clientes cliente;
                string tipo;
                long nro;
                DateTime fecha;
                decimal subtotal;
                decimal iva;
                decimal desc;

                using (var context = new DisancoEntities())
                {
                    Ventas ventaSeleccionada = context.Ventas.FirstOrDefault(v => v.id_venta == idVentaVieja);

                    cliente = ventaSeleccionada.Clientes;
                    tipo = ventaSeleccionada.venta_tipo_comprobante;
                    nro = ventaSeleccionada.venta_nro_inicio;
                    nro = ventaSeleccionada.venta_nro_inicio; ;
                    fecha = ventaSeleccionada.venta_fecha;
                    subtotal = ventaSeleccionada.venta_subtotal;
                    iva = ventaSeleccionada.venta_iva;
                    desc = ventaSeleccionada.venta_descuento;

                    ventaAnulada.Clientes = cliente;
                    ventaAnulada.venta_estado = Estado.Anulada;
                    ventaAnulada.venta_tipo_comprobante = tipo;
                    ventaAnulada.venta_nro_inicio = nro;
                    ventaAnulada.venta_nro_fin = nro;
                    ventaAnulada.venta_fecha = fecha;
                    ventaAnulada.venta_subtotal = subtotal;
                    ventaAnulada.venta_iva = iva;
                    ventaAnulada.venta_descuento = desc;

                    context.AddToVentas(ventaAnulada);
                    context.SaveChanges();
                }

                return true;

            }
            catch (Exception err)
            {
                MessageBox.Show(err.ToString());
                return false;
            }
        }

        private bool updateOldVenta(int idVenta)
        {
            try
            {
            using (var context = new DisancoEntities())
            {
                Ventas ventaSeleccionada = context.Ventas.FirstOrDefault(v => v.id_venta == idVenta);

                double nrofacturaviejo = ventaSeleccionada.venta_nro_inicio;
                DateTime fechafactvieja = ventaSeleccionada.venta_fecha;

                int autId = Funcion.obtenerAuth(ventaSeleccionada.venta_tipo_comprobante);
                if (autId != 0)
                {
                    Autorizaciones auth = context.Autorizaciones.FirstOrDefault(a => a.autorizacion_id == autId);
                    auth.autorizacion_ultimo_numero = auth.autorizacion_ultimo_numero + 1;

                    ventaSeleccionada.venta_nro_inicio = auth.autorizacion_ultimo_numero;
                    ventaSeleccionada.venta_nro_fin = ventaSeleccionada.venta_nro_inicio;
                    ventaSeleccionada.venta_fecha = DateTime.Now;
                    context.SaveChanges();
                    return true;
                }
                else
                {
                    return false;
                }
            }
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
                return false;
            }
        }

      
        private void txbRegistrarPagoCA_Click(object sender, EventArgs e)
        {
            using (var context = new DisancoEntities())
            {
                var cliente = context.Clientes.FirstOrDefault(c => c.cliente_id == this.clienteid);

                frmRegistrarPago pago = new frmRegistrarPago(cliente.cliente_id);
                DialogResult dr = pago.ShowDialog();

                if (dr == System.Windows.Forms.DialogResult.OK)
                {
                    int id = cliente.cliente_id;
                    //context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);
                    cliente = context.Clientes.FirstOrDefault(c => c.cliente_id == id);

                    cargarCompras();
                    cargarComprasAdicionales();
                    cargarPagos();
                }
            }
        }

        private void btnFacturarVtaPend_Click(object sender, EventArgs e) // Facturar Venta Pendiente de asignar comprobante 
        {
            int id_venta = (int)dgvComprasRealizadas.CurrentRow.Cells["venta_id"].Value;

            using (var context = new DisancoEntities())
            {
                Ventas objVenta = context.Ventas.FirstOrDefault(v => v.id_venta == id_venta);

                frmEmitirFactura.ventaid = objVenta.id_venta;


                Ferreteria.Forms.GestionPedidos.FrmIncremento FrmInc = new GestionPedidos.FrmIncremento();
                FrmInc.ShowDialog();



                cargarCompras();
                btnFacturarVtaPend.Enabled = false;

                ventaid = 0;
            }
        }

        private void btnVerInfoCompra_Click(object sender, EventArgs e) // Ver Info detallada de la compra
        {
            int id_venta = (int)dgvComprasRealizadas.CurrentRow.Cells["venta_id"].Value;

            using (var context = new DisancoEntities())
            {
                Ventas objVenta = context.Ventas.FirstOrDefault(v => v.id_venta == id_venta);

                frmDetalleCompra detalleCompra = new frmDetalleCompra(objVenta);
                detalleCompra.ShowDialog();
            }
        }

        private void btnRegistrarPago_Click(object sender, EventArgs e) // Registrar Pago
        {
             using (var context = new DisancoEntities())
            {
                var cliente = context.Clientes.FirstOrDefault(c => c.cliente_id == this.clienteid);

                frmRegistrarPago pago = new frmRegistrarPago(cliente.cliente_id);
                DialogResult dr = pago.ShowDialog();

                if (dr == System.Windows.Forms.DialogResult.OK)
                {
                    int id = cliente.cliente_id;
                    //context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);
                    cliente = context.Clientes.FirstOrDefault(c => c.cliente_id == id);

                    cargarCompras();
                    cargarComprasAdicionales();
                    cargarPagos();
                }
        }
    }

        private void btnReportVtasCliente_Click(object sender, EventArgs e) // Reporte Ventas de un CLiente
        {
            generarTablaVentas();

            diagVentas.Document = docVentas;
            DialogResult resultado = diagVentas.ShowDialog();

            if (resultado == DialogResult.OK)
            {
                docVentas.PrinterSettings = diagVentas.PrinterSettings;
                //docVentas.Print();
                ppdVentas.Document = docVentas;
                ((Form)ppdVentas).WindowState = FormWindowState.Maximized;
                ppdVentas.ShowDialog();
            }

        }

        private void btnVerEstadoCuenta_Click(object sender, EventArgs e)
        {
            using (var context = new DisancoEntities())
            {
                var cliente = context.Clientes.FirstOrDefault(c => c.cliente_id == this.clienteid);

                FrmEstadoCuenta pago = new FrmEstadoCuenta(cliente.cliente_id);
                pago.ShowDialog();

            }

        }

        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void MenuComprasRealizadas_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {

        }


        }
}
